Quelle est la méthode la plus rapide pour convertir un java.nio.ByteBuffer a en un CharBuffer (nouvellement créé) b ou char [] b. En faisant cela, il est important que a [i] == b [i]. Cela signifie que non pas a [i] et a [i + 1] forment ensemble une valeur b [j], ce que ferait getChar (i), mais les valeurs devraient être "spread". byte a [] = {1,2,3, 125,126,127, -128, -127, -126} // chacun un octet (qui sont signés) char b [] = {1,2,3, 125,126,127, 128, 129, 130} // chacun un caractère (qui n'est pas signé) Notez que l'octet: -128 a les mêmes bits (8 inférieurs) que char: 128. Par conséquent, je suppose que la «meilleure» interprétation serait comme je l'ai noté ci-dessus, car les bits sont les mêmes. Après cela, j'ai également besoin de la traduction vice versa: le moyen le plus efficace pour récupérer un char [] ou java.nio.CharBuffer dans un java.nio.ByteBuffer.
2021-01-06 08:19:07
Donc, ce que vous voulez, c'est convertir en utilisant l'encodage ISO-8859-1. Je ne revendique rien sur l'efficacité, mais au moins c'est assez court à écrire: Résultat CharBuffer = Charset.forName ("ISO-8859-1"). Decode (byteBuffer); L'autre direction serait: Résultat ByteBuffer = Charset.forName ("ISO-8859-1"). Encode (charBuffer); Veuillez mesurer cela par rapport à d'autres solutions. (Pour être honnête, la partie Charset.forName ne doit pas être incluse, et doit également être effectuée une seule fois, pas pour chaque tampon à nouveau.) À partir de Java 7, il existe également la classe StandardCharsets avec des instances Charset pré-instanciées, vous pouvez donc utiliser Résultat CharBuffer = StandardCharsets.ISO_8859_1.decode (byteBuffer); et Résultat ByteBuffer = StandardCharsets.ISO_8859_1.encode (charBuffer); au lieu. (Ces lignes font la même chose que les précédentes, juste la recherche est plus facile et il n'y a aucun risque de mal saisir les noms, et pas besoin d'attraper les exceptions impossibles.) | Je serais d'accord avec @ Ishtar's, suggérer d'éviter du tout la conversion vers une nouvelle structure et de ne convertir que si vous en avez besoin. Cependant, si vous avez un tas de ByteBuffer, vous pouvez le faire. ByteBuffer bb = ... byte [] tableau = bb.array (); char [] chars = nouveau char [bb.remaining ()]; pour (int i = 0; i